package mod

import (
	"bufio"
	"os"
	"path/filepath"
	"strings"
)

// Name 函数用于获取当前工作目录下的 go.mod 文件中声明的模块名称。
// 如果 go.mod 文件不存在或者无法读取，将返回错误信息。
func Name() (string, error) {
	// 获取当前工作目录路径
	path, _ := os.Getwd()
	// 构造 go.mod 文件的完整路径
	filePath := filepath.Join(path, "go.mod")
	// 检查 go.mod 文件是否存在
	if _, err := os.Stat(filePath); os.IsNotExist(err) {
		// 如果文件不存在，返回错误信息
		return "文件不存在", err
	}

	// 以只读模式打开 go.mod 文件
	fd, err := os.OpenFile(filePath, os.O_RDONLY, 0666)
	if err != nil {
		// 如果无法打开文件，返回错误信息
		return "", err
	}

	// 确保文件在函数结束时关闭
	defer fd.Close()
	// 创建一个扫描器来逐行读取文件内容
	scanner := bufio.NewScanner(fd)
	// 遍历文件的每一行
	for scanner.Scan() {
		// 如果当前行以 "module " 开头
		if line := scanner.Text(); strings.HasPrefix(line, "module ") {
			// 返回去掉 "module " 前缀的模块名称
			return strings.ReplaceAll(line, "module ", ""), nil
		}
	}
	// 如果没有找到模块名称，返回空字符串和 nil 错误
	return "", nil
}
